package Componentes;
import java.util.Timer;
import javax.swing.ImageIcon;
import Graficos.ComponenteGrafico;
import Logica.Tiempo;

/**
 * ProyectoX TDP 2011
 * @author  Ma Gimena Ramos- LU:82716
 * @autor Brenda Dilschneider- LU: 92774
 *
 */
public  class Estrella extends Power_Up implements Runnable{
	private Thread hilo;
	private int controlPos;
	private Timer time;
	private int sentido;
	
	/**
	 * constructor
	 */
	public Estrella(){
		super();
		destruido=false;
		visible=false;
		transitable=true;
		hilo=new Thread(this);
		controlPos=0;
		sentido=2;
			}

	
	/**
	 * convierte a mario invencible 
	 */
	@Override
	public void chocarMario() {
		if (visible){
		if (!destruido)
		{mario.aumentarPuntaje(15);
		this.comp.setIcon(null);
		destruido=true;
	   mario.CambiarInvencible();}
		 time=new Timer();
		time.schedule(new Tiempo(mario), 15* 1000);}
		
	}
	
	/**
	 * inicia el hilo de la estrella
	 */
	@Override
	public void arrancarHilo() {
		hilo.start();
		
	}

	/**
	 * clona el objeto y devuelve un clon de tipo estrella
	 */
	public Object clonar()
	{
		Estrella v = new Estrella();

	ComponenteGrafico c=  new ComponenteGrafico(null);
		
		v.setGrafico(c);
		
		return v;
	}
	
	/**
	 * llama al metodo ChocarMario
	 */
	@Override
	public void pisadoPorMario() {
		chocarMario();
		
	}

	
	/**
	 * para el hilo y cambia algunos valores de variables del objeto
	 */
	@Override
	public void destruirHilo() {
		this.comp.setIcon(null);
		destruido=true;
		hilo.stop();
		
	}

	/**
	 * cambia el sentido para el cual se movia
	 */
	@Override
	public void serChocado() {
		if (sentido==1)	
			sentido=2;
			else
				sentido=1;
	}

	/**
	 * metodo heredado redefinido sin uso
	 */
	@Override
	public void serChocado(Componente c) {
		// TODO Auto-generated method stub
		
	}

	
	/**
	 * se encarga de lo que realiza el hilo del objeto, se mueve la estrella hasta chocar con mario o caerse
	 */
	@Override
	public void run() {
		while( true ) {
			if (sentido==2){//va a la derecha
			this.comp.setLocation(this.comp.getLocation().x+1, this.comp.getLocation().y);
			controlPos+=1;
	if (controlPos==16)
		{controlPos=0;
	     this.setPosicion(this.obtenerPosicion().getX()+1,this.obtenerPosicion().getY());
	   if (mario.estachiquito())
	     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
	    	 chocarMario();}
	   else
	   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
	    	 chocarMario();}
	    
		Componente c1= mario.obtenerPartida().getComponente(this.obtenerPosicion().getX()+1,this.obtenerPosicion().getY())	;
		if (c1!=null)
			c1.serChocado(this);
		    try {
			hilo.sleep(400);				
		
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		
		gravedad.Caida(this);
		}
			if (this.obtenerPosicion().getX()==0)
				destruirHilo();
			}
		else{//va hacia la izquierda
			this.comp.setLocation(this.comp.getLocation().x-1, this.comp.getLocation().y);
			controlPos+=1;
	if (controlPos==16)
		{controlPos=0;
	     this.setPosicion(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY());
	   if (mario.estachiquito())
	     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
	    	 chocarMario();}
	   else
	   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
	    	 chocarMario();}
	    
		Componente c1= mario.obtenerPartida().getComponente(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY())	;
		if (c1!=null)
			c1.serChocado(this);
		    try {
			hilo.sleep(400);				
		
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		
		gravedad.Caida(this);
		}
			if (this.obtenerPosicion().getX()==0)
				destruirHilo();
		}
			
		}

	
}}
	
		
	

